sources <- c("ESPN", "FantasyData", "FantasyPros", "FantasySharks", 
             "Yahoo", "FantasyFootballNerd", "NumberFire",
             "RTSports", "Walterfootball")

scrape <- scrape_data(src = sources,
                      pos = c('QB', 'RB', 'WR', 'TE', 'DST'),
                      season = 2020, 
                      week = week)

Simulation Time!

n_sims <- 10000

tic()
sim_lu <- map_df(1:n_sims, generate_lineup) %>%
  rename(pts_base = points) %>%  
  mutate(position = factor(position, 
                           levels = c("QB", "RB", "WR", "TE", "DST"))) %>% 
  select(lineup, Name, team, position, pts_base, pts_pred, sd_pts, Salary)
toc()
## 292.6 sec elapsed

Results

ggplotly(sim_lu %>% 
           group_by(Name, position, Salary) %>% 
           dplyr::summarize(lu = n_distinct(lineup)) %>% 
           ungroup() %>% 
           group_by(position) %>% 
           top_n(10, lu) %>% 
           ungroup() %>% 
           arrange(position, desc(lu)) %>% 
           mutate(Name = factor(Name),
                  Name = fct_reorder(Name, lu),
                  pct = round(lu / n_sims, 3) * 100) %>% 
           ggplot(aes(x = Name, y = pct, fill = Salary,
                      text = paste(Name, "in", lu, "lineups with", Salary, "salary"))) +
           geom_bar(stat = "identity") +
           facet_wrap(~position, ncol = 2, scales = "free_y") +
           coord_flip() +
           scale_fill_viridis_c() +
           xlab("") +
           ylab("Lineups (thousands)") +
           ggtitle("Top 10 Players By Position")) %>% 
  ggplotly(tooltip = "text")
plyr_lu <- sim_lu %>%
  group_by(Name, position) %>%
  dplyr::summarize(lu=n_distinct(lineup)) %>%
  ungroup() 

ggplotly(projections %>% 
  filter(avg_type=='weighted') %>%
  mutate(Name = ifelse(pos=="DST", last_name, paste(first_name, last_name))) %>%
  inner_join(fan_duel, by = c("Name", "position")) %>%
  select(Name, team, position, points, Salary, sd_pts) %>%
  left_join(plyr_lu, by='Name') %>%
  replace_na(list(lu=0)) %>%
  mutate(lu_bin=ifelse(lu==0, '0 Lineups', '>=1 Lineups'),
         lu_5=cut(lu,5, labels = FALSE)) %>%
  ggplot(aes(x=Salary, y=points, color=lu_bin, size=sd_pts, text=Name)) +
  geom_point() +
  theme_minimal() +
  scale_color_manual(values = c('red', 'blue'), name="") +
  geom_smooth(inherit.aes = FALSE, aes(x=Salary, y=points), method = 'lm') +
  ylab('Projected Points') +
  xlab('Salary') +
  ggtitle('Who makes it into Optimized Lineups?') +
  scale_x_continuous(labels=scales::dollar))
lu_df <- sim_lu %>%
  group_by(lineup) %>%
  dplyr::summarize(lineup_pts=sum(pts_pred),
                   lineup_sd=sum(sd_pts)) %>%
  ungroup()

pto <- psel(lu_df, low(lineup_sd) * high(lineup_pts))


ggplotly(ggplot(lu_df, aes(y=lineup_pts, x=lineup_sd, text = paste0("Lineup: ", lineup))) +
  geom_point() +
  geom_point(data=pto, size=5) +
  ylab('Lineup Points') +
  xlab('Lineup Points St Dev') +
  ggtitle('Lineup Points vs. Uncertainty',
          subtitle = 'Pareto Lineups Bolded'))
psel(lu_df, low(lineup_sd) * high(lineup_pts)) %>%
  left_join(sim_lu, by='lineup') %>%
  group_by(lineup) %>%
  arrange(lineup_pts, position, desc(Salary)) %>%
  select(lineup, lineup_pts, lineup_sd, Name, team, position, pts_pred, sd_pts, Salary) %>%
  mutate_at(vars(lineup_pts, lineup_sd, pts_pred, sd_pts), function(x) round(x, 2)) %>%
  knitr::kable() %>%
  kable_styling(fixed_thead = T) %>%
  column_spec(1:3, bold=TRUE) %>%
  collapse_rows(columns = 1:3, valign = 'top') %>%
  scroll_box(height = '700px', width = '100%')
lineup lineup_pts lineup_sd Name team position pts_pred sd_pts Salary
5471 123.30 2.99 Deshaun Watson HOU QB 23.34 0.11 8300
Dalvin Cook MIN RB 20.90 0.53 9300
David Montgomery CHI RB 12.73 0.57 5900
Julio Jones ATL WR 16.20 0.23 8200
Stefon Diggs BUF WR 14.90 0.30 7600
Cole Beasley BUF WR 9.88 0.17 5300
Nelson Agholor LVR WR 8.88 0.19 5000
Evan Engram NYG TE 9.03 0.44 5500
Tennessee Titans TEN DST 7.45 0.44 3800
6715 124.63 3.79 Deshaun Watson HOU QB 23.42 0.11 8300
Dalvin Cook MIN RB 20.04 0.53 9300
Derrick Henry TEN RB 19.13 0.95 8900
D’Andre Swift DET RB 12.13 0.41 6000
Stefon Diggs BUF WR 15.41 0.30 7600
Cole Beasley BUF WR 9.68 0.17 5300
Nelson Agholor LVR WR 8.32 0.19 5000
Darren Waller LVR TE 11.65 0.85 6400
Dallas Cowboys DAL DST 4.84 0.27 3000
844 125.22 3.80 Russell Wilson SEA QB 24.55 0.29 9000
Dalvin Cook MIN RB 20.32 0.53 9300
James Robinson JAC RB 16.69 0.60 7300
David Montgomery CHI RB 12.61 0.57 5900
Stefon Diggs BUF WR 15.26 0.30 7600
Cole Beasley BUF WR 9.62 0.17 5300
Nelson Agholor LVR WR 8.52 0.19 5000
Hayden Hurst ATL TE 9.16 0.45 5600
Pittsburgh Steelers PIT DST 8.49 0.69 5000
4108 125.52 3.84 Deshaun Watson HOU QB 23.50 0.11 8300
Dalvin Cook MIN RB 19.50 0.53 9300
James Conner PIT RB 16.44 0.23 8200
David Johnson HOU RB 13.98 0.55 6800
Tyler Lockett SEA WR 14.95 0.75 7400
Cole Beasley BUF WR 9.86 0.17 5300
Nelson Agholor LVR WR 8.86 0.19 5000
Darren Waller LVR TE 11.72 0.85 6400
Atlanta Falcons ATL DST 6.71 0.44 3300
2124 129.55 3.91 Deshaun Watson HOU QB 23.16 0.11 8300
Dalvin Cook MIN RB 20.61 0.53 9300
James Robinson JAC RB 15.76 0.60 7300
David Montgomery CHI RB 13.38 0.57 5900
Stefon Diggs BUF WR 15.10 0.30 7600
Mike Williams LAC WR 11.53 0.55 6200
Cole Beasley BUF WR 9.69 0.17 5300
Darren Waller LVR TE 13.34 0.85 6400
Houston Texans HOU DST 6.98 0.22 3700
1154 133.14 3.94 Deshaun Watson HOU QB 23.49 0.11 8300
Dalvin Cook MIN RB 21.77 0.53 9300
James Robinson JAC RB 18.25 0.60 7300
David Montgomery CHI RB 13.37 0.57 5900
Stefon Diggs BUF WR 15.19 0.30 7600
Keenan Allen LAC WR 16.50 0.67 7500
Nelson Agholor LVR WR 8.50 0.19 5000
Noah Fant DEN TE 9.88 0.52 5800
Atlanta Falcons ATL DST 6.18 0.44 3300
6557 133.67 5.02 Josh Allen BUF QB 24.02 1.01 8200
Dalvin Cook MIN RB 21.41 0.53 9300
James Robinson JAC RB 17.02 0.60 7300
David Montgomery CHI RB 12.97 0.57 5900
Stefon Diggs BUF WR 15.86 0.30 7600
Keenan Allen LAC WR 16.54 0.67 7500
Cole Beasley BUF WR 9.38 0.17 5300
Hunter Henry LAC TE 9.97 0.71 5600
Atlanta Falcons ATL DST 6.50 0.44 3300
7839 134.58 5.18 Deshaun Watson HOU QB 23.29 0.11 8300
Dalvin Cook MIN RB 21.24 0.53 9300
James Robinson JAC RB 17.05 0.60 7300
Antonio Gibson WAS RB 17.49 1.89 6200
Stefon Diggs BUF WR 15.32 0.30 7600
Keenan Allen LAC WR 15.50 0.67 7500
Nelson Agholor LVR WR 8.85 0.19 5000
Evan Engram NYG TE 9.09 0.44 5500
Atlanta Falcons ATL DST 6.76 0.44 3300
2700 134.68 5.55 Deshaun Watson HOU QB 23.32 0.11 8300
Dalvin Cook MIN RB 20.58 0.53 9300
Antonio Gibson WAS RB 16.09 1.89 6200
David Montgomery CHI RB 13.25 0.57 5900
Stefon Diggs BUF WR 16.11 0.30 7600
Keenan Allen LAC WR 16.86 0.67 7500
Nelson Agholor LVR WR 8.82 0.19 5000
Darren Waller LVR TE 12.33 0.85 6400
Tennessee Titans TEN DST 7.31 0.44 3800
235 135.15 5.70 Deshaun Watson HOU QB 23.38 0.11 8300
Dalvin Cook MIN RB 20.04 0.53 9300
Josh Jacobs LVR RB 16.45 0.73 7700
Antonio Gibson WAS RB 18.02 1.89 6200
Stefon Diggs BUF WR 15.26 0.30 7600
Darius Slayton NYG WR 12.11 0.66 5900
Cole Beasley BUF WR 9.59 0.17 5300
Darren Waller LVR TE 13.75 0.85 6400
Atlanta Falcons ATL DST 6.56 0.44 3300
404 135.47 5.93 Deshaun Watson HOU QB 23.41 0.11 8300
Dalvin Cook MIN RB 20.56 0.53 9300
Josh Jacobs LVR RB 16.82 0.73 7700
Antonio Gibson WAS RB 17.81 1.89 6200
Terry McLaurin WAS WR 15.16 0.76 7200
Darius Slayton NYG WR 12.87 0.66 5900
Cole Beasley BUF WR 9.69 0.17 5300
Darren Waller LVR TE 12.03 0.85 6400
Houston Texans HOU DST 7.12 0.22 3700
9973 135.92 6.42 Deshaun Watson HOU QB 23.48 0.11 8300
Dalvin Cook MIN RB 20.92 0.53 9300
James Robinson JAC RB 16.39 0.60 7300
Antonio Gibson WAS RB 17.81 1.89 6200
Stefon Diggs BUF WR 15.72 0.30 7600
Brandin Cooks HOU WR 12.22 1.08 6100
Cole Beasley BUF WR 9.21 0.17 5300
Darren Waller LVR TE 12.18 0.85 6400
Jacksonville Jaguars JAC DST 7.99 0.87 3500
7451 136.17 6.45 Josh Allen BUF QB 24.24 1.01 8200
Dalvin Cook MIN RB 21.16 0.53 9300
Antonio Gibson WAS RB 17.35 1.89 6200
David Montgomery CHI RB 13.58 0.57 5900
Stefon Diggs BUF WR 15.60 0.30 7600
Keenan Allen LAC WR 15.21 0.67 7500
Cole Beasley BUF WR 9.96 0.17 5300
Darren Waller LVR TE 12.58 0.85 6400
Atlanta Falcons ATL DST 6.49 0.44 3300
5504 136.37 6.57 Deshaun Watson HOU QB 23.44 0.11 8300
Dalvin Cook MIN RB 21.24 0.53 9300
Josh Jacobs LVR RB 17.67 0.73 7700
Antonio Gibson WAS RB 14.98 1.89 6200
Tyler Lockett SEA WR 15.88 0.75 7400
Brandin Cooks HOU WR 13.40 1.08 6100
Cole Beasley BUF WR 9.76 0.17 5300
Darren Waller LVR TE 12.96 0.85 6400
Atlanta Falcons ATL DST 7.06 0.44 3300
9434 137.06 6.89 Justin Herbert LAC QB 23.45 0.81 7900
Dalvin Cook MIN RB 20.26 0.53 9300
Antonio Gibson WAS RB 18.90 1.89 6200
David Montgomery CHI RB 12.92 0.57 5900
Stefon Diggs BUF WR 15.64 0.30 7600
Keenan Allen LAC WR 14.66 0.67 7500
Christian Kirk ARI WR 12.22 0.82 5900
Darren Waller LVR TE 11.78 0.85 6400
Atlanta Falcons ATL DST 7.24 0.44 3300
2162 139.21 7.17 Justin Herbert LAC QB 23.92 0.81 7900
Dalvin Cook MIN RB 20.90 0.53 9300
James Robinson JAC RB 16.55 0.60 7300
Antonio Gibson WAS RB 18.34 1.89 6200
Stefon Diggs BUF WR 15.78 0.30 7600
Brandin Cooks HOU WR 12.99 1.08 6100
Darius Slayton NYG WR 12.12 0.66 5900
Darren Waller LVR TE 12.37 0.85 6400
Atlanta Falcons ATL DST 6.24 0.44 3300
3389 139.25 7.34 Kyler Murray ARI QB 34.39 3.06 8600
Dalvin Cook MIN RB 20.28 0.53 9300
Derrick Henry TEN RB 19.45 0.95 8900
David Montgomery CHI RB 12.82 0.57 5900
Tyler Lockett SEA WR 15.53 0.75 7400
Cole Beasley BUF WR 9.83 0.17 5300
Nelson Agholor LVR WR 8.59 0.19 5000
Darren Waller LVR TE 13.01 0.85 6400
Dallas Cowboys DAL DST 5.35 0.27 3000
9823 139.66 7.88 Kyler Murray ARI QB 34.11 3.06 8600
Dalvin Cook MIN RB 21.20 0.53 9300
Derrick Henry TEN RB 19.47 0.95 8900
David Montgomery CHI RB 12.47 0.57 5900
Stefon Diggs BUF WR 15.40 0.30 7600
Brandin Cooks HOU WR 12.72 1.08 6100
Cole Beasley BUF WR 9.88 0.17 5300
Logan Thomas WAS TE 7.57 0.77 5000
Atlanta Falcons ATL DST 6.83 0.44 3300
786 140.45 7.93 Kyler Murray ARI QB 28.83 3.06 8600
Derrick Henry TEN RB 20.89 0.95 8900
James Robinson JAC RB 16.49 0.60 7300
David Montgomery CHI RB 14.13 0.57 5900
Keenan Allen LAC WR 16.21 0.67 7500
Robby Anderson CAR WR 13.12 0.34 6600
Christian Kirk ARI WR 12.94 0.82 5900
T.J. Hockenson DET TE 10.95 0.49 6000
Atlanta Falcons ATL DST 6.90 0.44 3300
2241 141.50 8.06 Deshaun Watson HOU QB 23.30 0.11 8300
Dalvin Cook MIN RB 21.16 0.53 9300
Chase Edmonds ARI RB 20.42 2.67 6700
Antonio Gibson WAS RB 19.41 1.89 6200
DeAndre Hopkins ARI WR 17.50 0.71 8800
Darius Slayton NYG WR 11.91 0.66 5900
Nelson Agholor LVR WR 9.06 0.19 5000
Darren Waller LVR TE 11.69 0.85 6400
Atlanta Falcons ATL DST 7.05 0.44 3300
4941 141.84 10.16 Josh Allen BUF QB 23.76 1.01 8200
Dalvin Cook MIN RB 20.88 0.53 9300
Antonio Gibson WAS RB 17.07 1.89 6200
David Montgomery CHI RB 12.54 0.57 5900
Stefon Diggs BUF WR 15.97 0.30 7600
Tyler Lockett SEA WR 15.12 0.75 7400
Tim Patrick DEN WR 18.47 4.03 5300
Darren Waller LVR TE 11.53 0.85 6400
Houston Texans HOU DST 6.50 0.22 3700
8881 145.54 10.89 Kyler Murray ARI QB 32.86 3.06 8600
Dalvin Cook MIN RB 21.32 0.53 9300
James Robinson JAC RB 17.12 0.60 7300
Antonio Gibson WAS RB 15.42 1.89 6200
Terry McLaurin WAS WR 15.43 0.76 7200
Robby Anderson CAR WR 12.35 0.34 6600
Marcus Johnson IND WR 10.16 2.42 4900
Darren Waller LVR TE 13.56 0.85 6400
Atlanta Falcons ATL DST 7.33 0.44 3300
3617 145.83 12.54 Kyler Murray ARI QB 30.95 3.06 8600
Dalvin Cook MIN RB 21.36 0.53 9300
Jonathan Taylor IND RB 17.80 2.11 6400
Antonio Gibson WAS RB 16.01 1.89 6200
Keenan Allen LAC WR 15.31 0.67 7500
DeVante Parker MIA WR 15.36 2.09 6300
Marquise Brown BAL WR 10.62 0.46 5800
Darren Waller LVR TE 11.89 0.85 6400
Jacksonville Jaguars JAC DST 6.53 0.87 3500
9395 151.63 12.80 Kyler Murray ARI QB 31.88 3.06 8600
Dalvin Cook MIN RB 21.45 0.53 9300
Chase Edmonds ARI RB 17.61 2.67 6700
David Montgomery CHI RB 12.35 0.57 5900
Stefon Diggs BUF WR 15.24 0.30 7600
Keenan Allen LAC WR 15.40 0.67 7500
Tim Patrick DEN WR 20.93 4.03 5300
Noah Fant DEN TE 10.23 0.52 5800
Atlanta Falcons ATL DST 6.53 0.44 3300
7921 154.33 16.35 Chase Daniel DET QB 37.90 9.61 6000
Dalvin Cook MIN RB 21.33 0.53 9300
James Robinson JAC RB 16.42 0.60 7300
Chase Edmonds ARI RB 16.85 2.67 6700
Stefon Diggs BUF WR 15.67 0.30 7600
Keenan Allen LAC WR 15.46 0.67 7500
Darius Slayton NYG WR 11.45 0.66 5900
Darren Waller LVR TE 12.71 0.85 6400
Atlanta Falcons ATL DST 6.54 0.44 3300
4555 165.27 17.58 Chase Daniel DET QB 49.00 9.61 6000
Derrick Henry TEN RB 19.40 0.95 8900
Chase Edmonds ARI RB 17.13 2.67 6700
David Montgomery CHI RB 13.71 0.57 5900
DeAndre Hopkins ARI WR 18.11 0.71 8800
Keenan Allen LAC WR 15.51 0.67 7500
JuJu Smith-Schuster PIT WR 12.92 1.10 6500
Darren Waller LVR TE 12.52 0.85 6400
Atlanta Falcons ATL DST 6.97 0.44 3300